/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ecom.dao;

import ecom.exception.DataAccessLayerException;
import ecom.entity.Account;
import ecom.entity.Category;
import ecom.entity.Customer;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Expression;

/**
 *
 * @author
 */
public class AccountDAO extends AbstractDAO{
    private final static String IBAN = "iban";

    public AccountDAO() {
        super();
    }

    /**
     * Crée un nouvel Account dans la base de données
     * @param account Account à créer
     */
    public void create(Account account) throws DataAccessLayerException {
        super.saveOrUpdate(account);
    }


    /**
     * Supprime un Account de la base de données
     * @param account Account à supprimer
     */
    public void delete(Account account) throws DataAccessLayerException {
        super.delete(account);
    }

    /**
     * Rrecherche un Account par sa clé primaire 
     * @param id id de Account
     * @return Account Retourne un Account
     */
    public Account find(Integer id) throws DataAccessLayerException {
        return (Account) super.find(Account.class, id);
    }

    /**
     * Met à jour un Account dans la base de données
     * @param account Account à mettre à jour
     */
    public void update(Account account) throws DataAccessLayerException {
        super.saveOrUpdate(account);
    }

    /**
     * Recherche tous les Account de la base de données
     * @return List<Account> retourne une liste de Account
     */
    public List<Account> findAll() throws DataAccessLayerException{
        return super.findAll(Account.class);
    }

    /**
     * Recherche un Account en fonction de son iban
     * @param iban iban du Account
     * @return Account retourne un Account
     */
    public Account findByIban(String iban) {
        Account account = null;
         try {
            startOperation();
            Criteria crit = session.createCriteria(Account.class);
            crit.add(Expression.eq(IBAN, iban));
            account = (Account) crit.uniqueResult();
            tx.commit();
        } catch (HibernateException e) {
            handleException(e);
        }

        return account;
    }

   }
